home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 October: Mac OS SDK / Dev.CD Oct 00 SDK1.toast / Development Kits / Mac OS / Installer SDK 1.2.3 / Upgrader 1.2.3 & Engines / Installer Engine 4.5.2 / Installer Script Examples / User Interface Example / UserInterfaceExample.r < prev    next >
Encoding:
Text File  |  1998-08-12  |  18.4 KB  |  445 lines  |  [TEXT/MPS ]

  1. //
  2. //    User Interface Example.r    - demonstrates User Interface of the Installer
  3. //
  4. //    
  5. //        This example demonstrates usage of the following functionality:
  6. //            - Custom install framework to create custom feature hierarchy
  7. //            - Presentation of multiple easy feature sets
  8. //            - Installation of files
  9. //            - Use of the latest script resources
  10. //
  11. //        Copyright 1993-1998, Apple Computer, Inc., All Rights Reserved
  12. //
  13.  
  14. #include "Types.r"
  15. #include "InstallerTypes.r"
  16.  
  17. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  18. //
  19. // • Installer Version Resource
  20. //
  21. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  22.  
  23. // This way the Installer script can only be opened by Installer Engine 4.5 and later.
  24. resource 'invs' (1) {
  25.     format0 {    
  26.         0x04, 0x50, 0x80, 0x00,
  27.         "4.5"
  28.     }
  29. };
  30.  
  31.  
  32. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  33. //
  34. // • Installer Preference Resource
  35. //
  36. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  37.  
  38. resource 'inpr' (300) {
  39.     format1 {
  40.         useDiskTargetMode,            // User chooses an entire disk as the destination.
  41.         noSetupFunctionSupplied,    // Not using a setup function code resource
  42.         dontAllowCleanInstall,        // Clean install is only appropriate when installing Apple System Software
  43.         isNotSSWInstallation,        // We're not installing System Software
  44.         '',                            // Setup function type, but we don't have one so it's zero
  45.         0,                            // Setup function ID, but we don't have one so it's zero
  46.         0,                            // Text Encoding ID of product's localized language, 0 for U.S.
  47.         1000,                        // ID of 'STR#' resource to store feature set names 
  48.         {        
  49.             1000, 1,                    // Recommended Feature Set (Feature set rule framework ID and string index of feature set name)
  50.             1001, 2,                    // Full Feature Set
  51.             1002, 3,                    // Minimal Feature Set
  52.         },
  53.         ""                            // Default target folder name.  Not needed for disk mode.
  54.     }
  55. };
  56.  
  57. resource 'STR#' (1000) {
  58.     {
  59.         /* [1] */    "Recommended Installation",
  60.         /* [2] */    "Full Installation",
  61.         /* [3] */    "Minimal Installation",
  62.     }
  63. };
  64.  
  65.  
  66. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  67. //
  68. // • Custom Install Feature List
  69. //
  70. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  71.  
  72. // We want the feature hierarchy to look like this:
  73. //                                                        Feature ID ('inpk' ID)        Removable
  74. //    [] Feature #1                (i)                        1001                        Yes
  75. //    [] Feature #2                (i)                        1002                        No
  76. //  -------------------------------                        9999                        -
  77. //    [] More Features                                    1003                        Partial
  78. //        [] Feature #3                                    2001                        Yes
  79. //        [] Even More Features                            2002                        Partial
  80. //            [] Feature #4                                3001                        No
  81. //            [] Feature #5                                3002                        Yes
  82. //    [] Feature #6                                        1004                        No
  83. //    [] Feature #7                                        1005                        Yes
  84. //
  85.  
  86. // custom install framework always uses ID of 766
  87. resource 'infr' (766) {
  88.     format0 {{
  89.         pickFirst, { 800 },
  90.     }}
  91. };
  92.  
  93. // rule that adds main package to Custom Install
  94. resource 'inrl' (800) {
  95.     format0 {{
  96.         // add main package to Custom Install package list
  97.         AddCustomItems{{ 1001, 1002, 9999, 1003, 1004, 1005 }},
  98.     }}
  99. };
  100.  
  101.  
  102. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  103. //
  104. // • Feature Set Resources (easy install frameworks)
  105. //
  106. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  107.  
  108. // Recommended Feature Set
  109. resource 'infr' (1000) {
  110.     format0 {{
  111.         pickFirst, { 1000 },    
  112.     }}
  113. };
  114.  
  115. // Rule that specifies Recommended Feature Set
  116. resource 'inrl' (1000) {
  117.     format0 {{
  118.         // add main package and description to Easy Install package list
  119.         AddPackages{{ 1001, 2001, 3002, 1005 }},
  120.         AddUserDescription{ "Click Start to install the recommended software onto “^0”." },
  121.     }}
  122. };
  123.  
  124. // Full Feature Set
  125. resource 'infr' (1001) {
  126.     format0 {{
  127.         pickFirst, { 1001 },    
  128.     }}
  129. };
  130.  
  131. // Rule that specifies Full Feature Set
  132. resource 'inrl' (1001) {
  133.     format0 {{
  134.         // add main package and description to Easy Install package list
  135.         AddPackages{{ 1001, 1002, 1003, 1004, 1005 }},
  136.         AddUserDescription{ "Click Start to install all software onto “^0”." },
  137.     }}
  138. };
  139.  
  140. // Minimal Feature Set
  141. resource 'infr' (1002) {
  142.     format0 {{
  143.         pickFirst, { 1002 },    
  144.     }}
  145. };
  146.  
  147. // Rule that specifies Minimal Feature Set
  148. resource 'inrl' (1002) {
  149.     format0 {{
  150.         // add main package and description to Easy Install package list
  151.         AddPackages{{ 1001, 3002 }},
  152.         AddUserDescription{ "Click Start to install a minimal set of software onto “^0”." },
  153.     }}
  154. };
  155.  
  156.  
  157. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  158. //
  159. // • Features (packages)
  160. //
  161. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  162.  
  163. resource 'inpk' (1001) {
  164.     format0 {
  165.         showsOnCustom,            // show the package as a selectable item
  166.                                 // item when used as a subpackage
  167.                                 
  168.         removable,                // show under Custom Remove as a selectable
  169.                                 // item, when package is a subpackage
  170.                                 
  171.         dontForceRestart,        // don't make user reboot after installation
  172.         
  173.         1001,                    // package comments resource ID
  174.         
  175.         0,                        // package size ( if 0, filled by ScriptCheck )
  176.         
  177.         "Feature #1",            // Custom Install selection description
  178.         {    
  179.             'infa', 1001;            // file to install or remove
  180.         },
  181.     }
  182. };
  183.  
  184. resource 'inpk' ( 1002 ) { format0 { showsOnCustom, notRemovable, dontForceRestart,    1002, 0, "Feature #2", { 'infa', 1002 }, } };
  185. resource 'inpk' ( 9999 ) { format0 { showsOnCustom, notRemovable, dontForceRestart,    0, 0, "-", {}, } };
  186. resource 'inpk' ( 1003 ) { format0 { showsOnCustom, removable, dontForceRestart,    0, 0, "More Features", { 'inpk', 2001,'inpk', 2002 }, } };
  187. resource 'inpk' ( 2001 ) { format0 { showsOnCustom, removable, dontForceRestart,    0, 0, "Feature #3", { 'infa', 2001 }, } };
  188. resource 'inpk' ( 2002 ) { format0 { showsOnCustom, removable, dontForceRestart,    0, 0, "Even More Features", { 'inpk', 3001,'inpk', 3002 }, } };
  189. resource 'inpk' ( 3001 ) { format0 { showsOnCustom, notRemovable, dontForceRestart,    0, 0, "Feature #4", { 'infa', 3001 }, } };
  190. resource 'inpk' ( 3002 ) { format0 { showsOnCustom, removable, dontForceRestart,    0, 0, "Feature #5", { 'infa', 3002 }, } };
  191. resource 'inpk' ( 1004 ) { format0 { showsOnCustom, notRemovable, dontForceRestart,    0, 0, "Feature #6", { 'infa', 1004 }, } };
  192. resource 'inpk' ( 1005 ) { format0 { showsOnCustom, removable, dontForceRestart,    0, 0, "Feature #7", { 'infa', 1005 }, } };
  193.  
  194.  
  195.  
  196. // • package comments
  197.  
  198. // NOTE: The actual file that will be installed by each package is a SimpleText file
  199. // named Example File. The information detailed below does not actually correspond to 
  200. // the file being installed and is intended only as an example of how to 
  201. // prepare custom package information resources.
  202.  
  203. // FURTHER NOTE: The values that are assigned to the Custom Package Information 
  204. // resource fields do not actually have any effect on the installation and 
  205. // are ignored during installation. They can however assist the user in 
  206. // choosing which packages they would like to include in their Custom 
  207. // Installation or Custom Removal.
  208.  
  209.  
  210. resource 'inpc' ( 1001 ) {
  211.     format1 {
  212.         0,                        // sample date ( 08/08/94 seconds since 1904)
  213.         0x08018000,                // sample version ( 8.0.1 GM)
  214.         
  215.         0,                        // Ignored, not shown in user interface
  216.         
  217.         9128,                    // icon resource ID ( 'ICN#', 'icl4', 'icl8' )
  218.                                 // - ID must be greater than 1024
  219.                                 // - resource item is in included rsrc file
  220.                                 
  221.         1001                    // 'TEXT' resource ID of item containing package description
  222.     }
  223. };
  224.  
  225. resource 'inpc' ( 1002 ) { format1 { 0, 0, 0, 9128,    1002 } };
  226.  
  227. data 'TEXT' ( 1001 ) { "This feature installs 'Example File • 1'." };
  228. data 'TEXT' ( 1002 ) { "This feature installs 'Example File • 2'." };
  229.  
  230.  
  231. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  232. //
  233. // • File Copy Commands
  234. //
  235. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  236.  
  237. resource 'ifa#' (300) {
  238.     format0 {
  239.         {    /* [1] */    1001,                     // Unique ID of this File Atom
  240.                         deleteWhenRemoving,        // Delete file on removal
  241.                         deleteWhenInstalling,    // Doesn't matter since we're copying
  242.                         copy,                    // Copy file during installation
  243.                         dontIgnoreLockedFile,    // Warn user if file is locked
  244.                         dontSetFileLocked,        // Leave file unlocked after installation
  245.                         useVersProcToCompare,    // Compare newness of file based on 'vers' resource
  246.                         srcNeedExist,            // File must exist on source disk
  247.                         rsrcForkInRsrcFork,        // File isn't compressed so rsrc fork is in rsrc fork
  248.                         leaveAloneIfNewer,        // Don't update an existing newer file
  249.                         updateExisting,            // Go ahead an update if appropriate
  250.                         copyIfNewOrUpdate,        // Go ahead and create a new file when necessary
  251.                         rsrcFork,                // Copy the resource fork, if any
  252.                         dataFork,                // Copy the data fork, if any
  253.                         0,                        // Total file size, filled in by ScriptCheck
  254.                         0,                        // Finder attributes, filled in by ScriptCheck
  255.                         1001,                    // Reference to target file specification
  256.                         1001,                    // Reference to source file specification
  257.                         0,                        // Exact target data fork size, filled in by ScriptCheck
  258.                         0,                        // Exact target resource fork size, filled in by ScriptCheck
  259.                         0,                        // Source version number, filled in by ScriptCheck
  260.                         0,                        // Compare versions using built-in compare proc.
  261.                         0,                        // No atom extender since we're not copying compressed data
  262.             /* [2] */    1002, deleteWhenRemoving, deleteWhenInstalling, copy, dontIgnoreLockedFile, dontSetFileLocked, useVersProcToCompare, srcNeedExist, rsrcForkInRsrcFork, leaveAloneIfNewer, updateExisting, copyIfNewOrUpdate, rsrcFork, dataFork, 0, 0, 1002, 1002, 0, 0, 0, 0, 0,
  263.             /* [3] */    2001, deleteWhenRemoving, deleteWhenInstalling, copy, dontIgnoreLockedFile, dontSetFileLocked, useVersProcToCompare, srcNeedExist, rsrcForkInRsrcFork, leaveAloneIfNewer, updateExisting, copyIfNewOrUpdate, rsrcFork, dataFork, 0, 0, 2001, 2001, 0, 0, 0, 0, 0,
  264.             /* [4] */    3001, deleteWhenRemoving, deleteWhenInstalling, copy, dontIgnoreLockedFile, dontSetFileLocked, useVersProcToCompare, srcNeedExist, rsrcForkInRsrcFork, leaveAloneIfNewer, updateExisting, copyIfNewOrUpdate, rsrcFork, dataFork, 0, 0, 3001, 3001, 0, 0, 0, 0, 0,
  265.             /* [5] */    3002, deleteWhenRemoving, deleteWhenInstalling, copy, dontIgnoreLockedFile, dontSetFileLocked, useVersProcToCompare, srcNeedExist, rsrcForkInRsrcFork, leaveAloneIfNewer, updateExisting, copyIfNewOrUpdate, rsrcFork, dataFork, 0, 0, 3002, 3002, 0, 0, 0, 0, 0,
  266.             /* [6] */    1004, deleteWhenRemoving, deleteWhenInstalling, copy, dontIgnoreLockedFile, dontSetFileLocked, useVersProcToCompare, srcNeedExist, rsrcForkInRsrcFork, leaveAloneIfNewer, updateExisting, copyIfNewOrUpdate, rsrcFork, dataFork, 0, 0, 1004, 1004, 0, 0, 0, 0, 0,
  267.             /* [7] */    1005, deleteWhenRemoving, deleteWhenInstalling, copy, dontIgnoreLockedFile, dontSetFileLocked, useVersProcToCompare, srcNeedExist, rsrcForkInRsrcFork, leaveAloneIfNewer, updateExisting, copyIfNewOrUpdate, rsrcFork, dataFork, 0, 0, 1005, 1005, 0, 0, 0, 0, 0,
  268.         }
  269.     }
  270. };
  271.  
  272.  
  273.  
  274. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  275. //
  276. // • Target File Descriptions
  277. //
  278. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  279.  
  280.  
  281. resource 'itf#' (300) {
  282.     format0 {
  283.         300,        // ID of 'ist#' resource that contains path names.
  284.         {    
  285.             /* [1] */    1001,                     // Unique ID of this target file specification
  286.                         noSearchForFile,        // We don't need to search for the target file
  287.                         TypeCrNeedNotMatch,        // We don't care what the existing type and creator are
  288.                         'ttro',                    // Type given to the file
  289.                         'ttxt',                    // Creator given to the file
  290.                         0x0,                    // Finder flags given to the file,filled in by ScriptCheck
  291.                         0x1,                    // Creation date given to the file, value of 1 specifies that ScriptCheck should update this value
  292.                         0x1,                    // Modification date given to the file, value of 1 specifies that ScriptCheck should update this value
  293.                         0,                        // No search proc specified since we're not searching
  294.                         1,                        // Index of the file path in the 'ist#' resource
  295.             /* [2] */    1002, noSearchForFile, TypeCrNeedNotMatch, 'ttro', 'ttxt', 0x0, 0x1, 0x1, 0, 2,
  296.             /* [3] */    2001, noSearchForFile, TypeCrNeedNotMatch, 'ttro', 'ttxt', 0x0, 0x1, 0x1, 0, 3,
  297.             /* [4] */    3001, noSearchForFile, TypeCrNeedNotMatch, 'ttro', 'ttxt', 0x0, 0x1, 0x1, 0, 4,
  298.             /* [5] */    3002, noSearchForFile, TypeCrNeedNotMatch, 'ttro', 'ttxt', 0x0, 0x1, 0x1, 0, 5,
  299.             /* [6] */    1004, noSearchForFile, TypeCrNeedNotMatch, 'ttro', 'ttxt', 0x0, 0x1, 0x1, 0, 6,
  300.             /* [7] */    1005, noSearchForFile, TypeCrNeedNotMatch, 'ttro', 'ttxt', 0x0, 0x1, 0x1, 0, 7,
  301.         }
  302.     }
  303. };
  304.  
  305. resource 'ist#' (300) {
  306.     format0 {
  307.         {    
  308.             /* [1] */    ":User Interface Example:Example File • 1",
  309.             /* [2] */    ":User Interface Example:Example File • 2",
  310.             /* [3] */    ":User Interface Example:Example File • 3",
  311.             /* [4] */    ":User Interface Example:Example File • 4",
  312.             /* [5] */    ":User Interface Example:Example File • 5",
  313.             /* [6] */    ":User Interface Example:Example File • 6",
  314.             /* [7] */    ":User Interface Example:Example File • 7",
  315.         }
  316.     }
  317. };
  318.  
  319.  
  320.  
  321. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  322. //
  323. // • Source File Descriptions
  324. //
  325. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  326.  
  327. // source file spec for Example File #1
  328. resource 'infs' (1001) {
  329.     'ttro',                                // Type for source file
  330.     'ttxt',                                // Creator for source file
  331.     0x1,                                // Creation date for source file
  332.     noSearchForFile,                    // ignored
  333.     TypeCrMustMatch,                    // Type & Creator must match file on source disk
  334.     "Example Files:Example File • 1"    // Path to source file        
  335. };
  336.  
  337. resource 'infs' (1002) { 'ttro', 'ttxt', 0x1, noSearchForFile, TypeCrMustMatch, "Example Files:Example File • 2" };
  338. resource 'infs' (2001) { 'ttro', 'ttxt', 0x1, noSearchForFile, TypeCrMustMatch, "Example Files:Example File • 3" };
  339. resource 'infs' (3001) { 'ttro', 'ttxt', 0x1, noSearchForFile, TypeCrMustMatch, "Example Files:Example File • 4" };
  340. resource 'infs' (3002) { 'ttro', 'ttxt', 0x1, noSearchForFile, TypeCrMustMatch, "Example Files:Example File • 5" };
  341. resource 'infs' (1004) { 'ttro', 'ttxt', 0x1, noSearchForFile, TypeCrMustMatch, "Example Files:Example File • 6" };
  342. resource 'infs' (1005) { 'ttro', 'ttxt', 0x1, noSearchForFile, TypeCrMustMatch, "Example Files:Example File • 7" };
  343.  
  344.  
  345. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  346. //
  347. // • Misc Resources
  348. //
  349. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  350.  
  351. // • Icons for get info window of packages.
  352.  
  353. resource 'icl8' (9128, purgeable) {
  354.     $"0000 0000 0000 0000 0000 0000 0000 0000"
  355.     $"0000 0000 0000 0000 0000 0000 0000 0000"
  356.     $"0000 0000 0000 0000 0000 0000 0000 0000"
  357.     $"0000 0000 0000 0000 0000 0000 0000 0000"
  358.     $"0000 0000 0000 0000 0000 0000 0000 0000"
  359.     $"0000 0000 0000 0000 0000 0000 0000 0000"
  360.     $"00FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"
  361.     $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FF00"
  362.     $"00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
  363.     $"F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 FF00"
  364.     $"00FF F5FA FAFA FAF5 F500 FFF5 F5F5 F5F5"
  365.     $"F5F5 F5F5 F5F5 F5F5 F5FA FAFA FAF5 FFFF"
  366.     $"00FF F5F5 F5F5 F5F5 F5FF F5F5 FFFF F5FF"
  367.     $"FFFF F5FF FFF5 FFFF F5F5 F5F5 F5F5 FFFF"
  368.     $"00FF F5FA FAFA FAF5 FFF5 FFF5 FFFF F5FF"
  369.     $"F5FF F5FF FFF5 FFFF F5FA FAFA FAF5 FFFF"
  370.     $"00FF F5FA FAFA FAF5 F5F5 F5F5 FFF5 F5F5"
  371.     $"F5F5 F5F5 F5F5 FFF5 F5FA FAFA FAF5 FFFF"
  372.     $"00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
  373.     $"F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 FFFF"
  374.     $"00FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"
  375.     $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"
  376.     $"00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
  377.     $"F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 FFFF"
  378.     $"00FF F5F5 FFFF FFF5 FFF5 F5FF F5FF FFFF"
  379.     $"FFF5 F5FF FFF5 F5F5 FFFF F5F5 FFF5 FFFF"
  380.     $"00FF F5F5 FFF5 F5F5 F5F5 FFF5 F5F5 F5F5"
  381.     $"F5F5 FFF5 F5FF F5FF F5F5 FFF5 FFF5 FFFF"
  382.     $"00FF F5F5 F5F5 F5F5 F5FF F5F5 F5F5 FFF5"
  383.     $"F5F5 F5F5 FFF5 F5FF F5FF FFF5 F5F5 FFFF"
  384.     $"00FF F5F5 FFF5 FFF5 FFF5 F5FF F5F5 FFF5"
  385.     $"F5F5 FFF5 F5FF F5FF F5F5 FFF5 FFF5 FFFF"
  386.     $"00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
  387.     $"F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 FFFF"
  388.     $"00FF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"
  389.     $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF"
  390.     $"00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
  391.     $"F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 FFFF"
  392.     $"00FF F5FA FAFA FAFA FAF5 F5FF FFFF FFFF"
  393.     $"FFFF FFFF FFF5 F5FA FAFA FAFA FAF5 FFFF"
  394.     $"00FF F5FA FAFA FAFA FAF5 FF00 FF00 0000"
  395.     $"0000 0000 00FF F5FA FAFA FAFA FAF5 FFFF"
  396.     $"00FF F5F5 F5F5 F5F5 F5F5 FFFF FFFF FFFF"
  397.     $"FFFF FFFF FFFF F5F5 F5F5 F5F5 F5F5 FFFF"
  398.     $"00FF F5FA FAFA FAFA FAF5 FFF9 F9F9 F9F9"
  399.     $"F9F9 F9F9 F9FF F5FA FAFA FAFA FAF5 FFFF"
  400.     $"00FF F5F5 F5F5 F5F5 F5F5 FFF9 F9F9 F9F9"
  401.     $"F9F9 F9F9 F9FF F5F5 F5F5 F5F5 F5F5 FFFF"
  402.     $"00FF F5FA FAFA FAFA FAF5 FFF9 F9F9 F9F9"
  403.     $"F9F9 F9F9 F9FF F5FA FAFA FAFA FAF5 FFFF"
  404.     $"00FF F5F5 F5F5 F5F5 F5F5 FFF9 F9F9 F9F9"
  405.     $"F9F9 F9F9 F9FF F5F5 F5F5 F5F5 F5F5 FFFF"
  406.     $"00FF F5FA FAFA FAFA FAF5 FFF9 F9F9 F9F9"
  407.     $"F9F9 F9F9 F9FF F5FA FAFA FAFA FAF5 FFFF"
  408.     $"00FF F5F5 F5F5 F5F5 F5F5 F5FF FFFF FFFF"
  409.     $"FFFF FFFF FFF5 F5F5 F5F5 F5F5 F5F5 FFFF"
  410.     $"00FF F5FA FAFA FAFA FAF5 F5F5 F5F5 F5F5"
  411.     $"F5F5 F5F5 F5F5 F5FA FAFA FAFA FAF5 FFFF"
  412.     $"00FF F5F5 F5F5 F5F5 F5F5 F5F5 FAFA FAFA"
  413.     $"FAFA FAFA F5F5 F5F5 F5F5 F5F5 F5F5 FFFF"
  414.     $"00FF F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5"
  415.     $"F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5F5 F5FF"
  416.     $"0000 FFFF FFFF FFFF FFFF FFFF FFFF FFFF"
  417.     $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FF"
  418. };
  419.  
  420.  
  421. resource 'ICN#' (9128) {
  422.     {    /* array: 2 elements */
  423.         /* [1] */
  424.         $"0000 0000 0000 0000 0000 0000 7FFF FFFE"
  425.         $"4000 0002 5E20 007B 404D DB03 5EAD 5B7B"
  426.         $"5E08 027B 4000 0003 7FFF FFFF 4000 0003"
  427.         $"4E97 98CB 4820 252B 4042 0963 4A92 252B"
  428.         $"4000 0003 7FFF FFFF 4000 0003 5F9F F9FB"
  429.         $"5FA8 05FB 403F FC03 5FA0 05FB 4020 0403"
  430.         $"5FA0 05FB 4020 0403 5FA0 05FB 401F F803"
  431.         $"5F80 01FB 400F F003 4000 0001 3FFF FFFE",
  432.         /* [2] */
  433.         $"0000 0000 0000 0000 0000 0000 7FFF FFFE"
  434.         $"7FFF FFFE 7FFF FFFF 7FFF FFFF 7FFF FFFF"
  435.         $"7FFF FFFF 7FFF FFFF 7FFF FFFF 7FFF FFFF"
  436.         $"7FFF FFFF 7FFF FFFF 7FFF FFFF 7FFF FFFF"
  437.         $"7FFF FFFF 7FFF FFFF 7FFF FFFF 7FFF FFFF"
  438.         $"7FFF FFFF 7FFF FFFF 7FFF FFFF 7FFF FFFF"
  439.         $"7FFF FFFF 7FFF FFFF 7FFF FFFF 7FFF FFFF"
  440.         $"7FFF FFFF 7FFF FFFF 7FFF FFFF 3FFF FFFE"
  441.     }
  442. };
  443.  
  444.  
  445.